The present invention relates to managed applications and more specifically to improving the performance of deployed managed applications.
A managed application is an application that runs on top of a managed virtual machine (VM). Examples of virtual machines include the Java Virtual Machine (JVM) and the Microsoft .NET Common Language Runtime (CLR).
The performance of a managed application is typically optimized during development of the application by the software developer. Portions of the application to be optimized may be identified via performance analysis based on running real-world and industry standard workloads. After managed applications are installed by end users or by Information Technology (IT) departments, the performance of the applications is typically not optimized any further. Moreover, software vendors do not offer guaranteed performance optimizations for improving the performance of the compute-intensive functionality in the applications to take advantage of underlying processor architecture capabilities or deployment of next generation processor technologies.
FIG. 1 is a flow chart which illustrates the current model for providing a managed application to an end user. A software developer (101) writes managed code (102), which is compiled (104) to create byte code (106). The developer then provides the byte code to a customer or end user (107), who may run a pre-JIT compiler, such as Microsoft's .NET Native Image Generator (NGEN). The pre-JIT compiler creates deployed binaries (110), which may then be run on a target system (112).